package main

import (
	"fmt"
	"github.com/golang/protobuf/ptypes/any"
)

func main() {
	// fmt.Print(compute(9.1,6.1))\

	// fmt.Println(test1(1,3,4))
	// declare()

	// fmt.Println(param_function(1,2,add))
	// fmt.Println(do("+"))
	slice1 := [...]int{1, 2, 3}
	slicetest(&slice1)
	fmt.Println(slice1)
}

// 单参数
func compute0(a, b int) int {
	sum := a + b
	return sum

}

// 多参数
func compute1(a, b int) (int, int) {
	sum := a + b
	sub := a - b
	return sum, sub

}
func compute(a, b float32) (float32, float32) {
	sum := a + b
	sub := a - b
	return sum, sub
}

// 可变参数
func test(x ...int) []int {
	return x
}

// 指定返回参数
func test1(x ...int) (slice []int) {
	slice = x
	return slice
}

//定义函数类型
func declare() {
	type calculation func(int, int) int

	var c calculation
	c = add
	fmt.Println(c(1, 2))
}

func add(x, y int) int {
	return x + y
}

func sub(x, y int) int {
	return x - y
}

// 函数作为参数
// innerFunc 作为参数函数表示 接受两个参数为int类型的变量，返回一个int类型的变量
func param_function(a, b int, innerFunc func(int, int) int) int {
	result := innerFunc(a, b)
	return result
}

// 函数作为返回值

/* func do(s string) (func(int,int) int,error) {
	switch(s) {
	case "+" :
		return add,nil
	case "-":
		return sub,nil
	default:
		err := error.New("无法识别的操作符")
		return nil,err
	}
} */

func slicetest(slice *[3]int) {
	slice[0] = 2
}
